Work on integration testing in docker
authorJeroen van der Heijden <jeroen@transceptor.technology>
Fri, 5 Oct 2018 16:12:32 +0000 (18:12 +0200)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Fri, 5 Oct 2018 16:12:32 +0000 (18:12 +0200)
itest/Dockerfile [new file with mode: 0644]
itest/requirements.txt [new file with mode: 0644]
itest/test_select.py
itest/testing/constants.py
itest/testing/server.py
itest/testing/testbase.py
test/test_siridb/test_siridb.c

diff --git a/itest/Dockerfile b/itest/Dockerfile
new file mode 100644 (file)
index 0000000..21b0473
--- /dev/null
@@ -0,0 +1,24 @@
+FROM ubuntu:18.04
+COPY ./main.c ./main.c
+COPY ./src/ ./src/
+COPY ./include/ ./include/
+COPY ./Release/ ./Release/
+RUN apt-get update && \
+    apt-get install -y \
+        libcleri-dev \
+        libuv1-dev \
+        libpcre2-dev \
+        uuid-dev \
+        build-essential
+RUN cd ./Release && \
+    make clean && \
+    make
+
+FROM python
+RUN apt-get update && \
+    apt-get install -y valgrind
+COPY --from=0 ./Release/siridb-server /Release/siridb-server
+COPY ./itest/ /itest/
+WORKDIR /itest
+RUN pip install -r requirements.txt
+CMD [ "python", "test_select.py" ]
\ No newline at end of file
diff --git a/itest/requirements.txt b/itest/requirements.txt
new file mode 100644 (file)
index 0000000..f44e679
--- /dev/null
@@ -0,0 +1,2 @@
+siridb-connector
+psutil
index 1a9f5c615bab2970bd45abba29ab68422c6a335e..3d9df9dcbb6c1a834c3c3b4e33e4f8edd4e7b916 100644 (file)
@@ -486,12 +486,13 @@ class TestSelect(TestBase):
 
         self.client0.close()
 
-        return False
+        return False
 
 
 if __name__ == '__main__':
     SiriDB.LOG_LEVEL = 'CRITICAL'
     Server.HOLD_TERM = True
     Server.MEM_CHECK = True
+    Server.TERMINAL = 'XTERM'
     Server.BUILDTYPE = 'Debug'
     run_test(TestSelect())
index 14223bcccae0a74c49bd53d5fc8bc7098a9dd994..e578923e666fba2919b51df2056e8afebd14af36 100644 (file)
@@ -2,11 +2,16 @@ BUILDTYPE = 'Debug'
 TEST_DIR = './testdir'
 SIRIDBC = '../{BUILDTYPE}/siridb-server'
 ADMIN = '/usr/local/bin/siridb-admin'
-VALGRIND = 'valgrind' + \
-  ' --tool=memcheck' + \
-  ' --leak-check=full' + \
-  ' --show-leak-kinds=all' + \
-  ' --track-origins=yes' + \
+VALGRIND = 'valgrind' \
+  ' --tool=memcheck' \
+  ' --error-exitcode=1' \
+  ' --leak-check=full' \
+  ' --show-leak-kinds=all' \
+  ' --track-origins=yes' \
   ' -v '
-VALGRIND = 'valgrind --tool=memcheck '
+VALGRIND = 'valgrind' \
+  ' --tool=memcheck'  \
+  ' --error-exitcode=1' \
+  ' --leak-check=full '
+
 MAX_OPEN_FILES = 512    # Default value is 32768 but with valgrind 512 is max
index a629449e5adfaf47944baacc07353e34637f4041..ca21e46c0042251063e2943eb8ced150eda0ec0b 100644 (file)
@@ -25,7 +25,7 @@ class Server:
     BUILDTYPE = BUILDTYPE
     SERVER_ADDRESS = '%HOSTNAME'
     IP_SUPPORT = 'ALL'
-    USE_XFCE4 = False
+    TERMINAL = None  # one of [ 'XTERM', 'XFCE4_TERMINAL', None  ]
     BIND_CLIENT_ADDRESS = "::"
     BIND_SERVER_ADDRESS = "::"
 
@@ -107,7 +107,7 @@ class Server:
     async def start(self, sleep=None):
         prev = self._get_pid_set()
 
-        if self.USE_XFCE4:
+        if self.TERMINAL == 'XFCE4_TERMINAL':
             rc = subprocess.Popen(
                 'xfce4-terminal -e "{}{} --config {} --log-colorized"'
                 ' --title {} --geometry={}{}'
@@ -118,7 +118,7 @@ class Server:
                         self.GEOMETRY,
                         ' -H' if self.HOLD_TERM else ''),
                 shell=True)
-        else:
+        elif self.TERMINAL == 'XTERM':
             rc = subprocess.Popen(
                'xterm {}-title {} -geometry {} -e "{}{} --config {}"'
                .format('-hold ' if self.HOLD_TERM else '',
@@ -128,6 +128,18 @@ class Server:
                        SIRIDBC.format(BUILDTYPE=self.BUILDTYPE),
                        self.cfgfile),
                shell=True)
+        else:
+            with open(f'{self.name}-err.log', 'a') as err:
+                with open(f'testdir/{self.name}-out.log', 'a') as out:
+                    rc = subprocess.Popen(
+                        '{}{} --config {}'
+                        .format(VALGRIND if self.MEM_CHECK else '',
+                                SIRIDBC.format(BUILDTYPE=self.BUILDTYPE),
+                                self.cfgfile),
+                        stderr=err,
+                        stdout=out,
+                        shell=True)
+                    self.assertEqual(rc, 0)
 
         await asyncio.sleep(5)
 
index d9a7204af343bdb21be2ca6e8c3892237397a995..dfba3d2b8c8065a48ba605ca0d1bba140ebdab52 100644 (file)
@@ -27,7 +27,7 @@ def default_test_setup(nservers=1, **kwargs):
 
             close = await func(self)
 
-            if close or close is None:
+            if close or close is None or Server.TERMINAL is None:
                 for server in self.servers:
                     result = await server.stop()
                     self.assertTrue(
index aa1a198994f7c58baf0875f2f79d99b151eb5fe3..40771c770efab52585824a639c11f0eda05ef87e 100644 (file)
@@ -113,8 +113,6 @@ static int test_series_ensure_type(void)
 
 int main()
 {
-
-
     return (
         test_series_ensure_type() ||
         0